/*
    异或运算的骚操作

    前置知识：讲解003-二进制和位运算
    特别提醒：Python的同学实现位运算的题目需要特别注意，需要自己去手动处理溢出和符号扩展等问题
    比如：(n << shift_amount) & 0xFFFFFFFF

    先来一个好玩的问题：
    袋子里一共a个白球，b个黑球，每次从袋子里拿2个球，每个球每次被拿出机会均等
    如果拿出的是2个白球、或者2个黑球，那么就往袋子里重新放入1个白球
    如果拿出的是1个白球和1个黑球，那么就往袋子里重新放入1个黑球
    那么最终袋子里一定会只剩1个球，请问最终的球是黑的概率是多少？用a和b来表达这个概率。

    被镇住了吧？其实这题是一个陷阱。

    答案：
    黑球的数量如果是偶数，最终的球是黑的概率是0%
    黑球的数量如果是奇数，最终的球是黑的概率是100%
    完全和白球的数量无关。为啥？异或运算的性质了解之后，就了解了。

    ================================================

    异或运算性质

    1）异或运算就是无进位相加
    2）异或运算满足交换律、结合律，也就是同一批数字，不管异或顺序是什么，最终的结果都是一个
    3）0^n=n，n^n=0
    4）整体异或和如果是x，整体中某个部分的异或和如果是y，那么剩下部分的异或和是x^y

    这些结论最重要的就是1）结论，所有其他结论都可以由这个结论推论得到

    其中第4）相关的题目最多，利用区间上异或和的性质

    Nim博弈也是和异或运算相关的算法，将在后续【必备】课程里讲到

    ================================================

    题目1 交换两个数
    题目2 不用任何判断语句和比较操作，返回两个数的最大值
    题目3 找到缺失的数字
    题目4 数组中1种数出现了奇数次，其他的数都出现了偶数次，返回出现了奇数次的数

    Brian Kernighan算法 - 提取出二进制状态中最右侧的1
    题目5 数组中有2种数出现了奇数次，其他的数都出现了偶数次，返回这2种出现了奇数次的数

    题目6 数组中只有1种数出现次数少于m次，其他数都出现了m次，返回出现次数小于m次的那种数

*/